Contents
  1. 1. 汉诺伊塔问题
    1. 1.1. 对于n阶Hanoi塔:

汉诺伊塔问题

  这么经典的题目大家应该都了解吧,百度上说明也一堆

对于n阶Hanoi塔:

  • n = 1时只需将编号为1的圆盘从A座移至C座

  • n > 1时,我们分三个阶段:

  • 1:将A塔座上的n-1个圆盘按照规定移至到B塔座

  • 2:将编号为n的圆盘由A座移至C座

  • 3:利用A塔座,将B塔座上的n-1个圆盘按规定移至到C塔座

  • 最少移动次数:2^n - 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>

void hanoi(int n, char a, char b, char c)
{

if(n == 1) //一阶时
{
printf("%d %c->%c\n",n, a, c);
return ;
}
hanoi(n-1, a, c, b);
printf("%d %c->%c\n",n, a, c); //最底下的那个
hanoi(n-1, b, a, c);
}

int main()
{

int i,n;
char a, b, c;
a = 'a', b = 'b', c = 'c';
scanf("%d", &n);
hanoi(n, a, b, c);
return 0;
}
Contents
  1. 1. 汉诺伊塔问题
    1. 1.1. 对于n阶Hanoi塔: